МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
РОЗРАХУНКОВА РОБОТА №1
З дисципліни : Алгоритмізація і програмування.
Визначення зміни в часі температури металевої заготовки при нагріванні в печі.
Варіант №2
Завдання : Зміна в часі температури металевої заготовки при нагріванні в печі описується наступною залежністю
де а – початкова температура печі і заготовки; b – температура печі через годину. При різниці температур Т заготовки і печі метал нагрівається із швидкістю k*T градусів за хвилину, k – коефіцієнт пропорційності.
Визначити : за який час t (за скільки хвилин) температура заготовки досягне 150 °С, коли а=50 °С, b=500 °С, k=0,85 хв.‾ ¹; (14,5098 хв.)
Розв’язання
Зведемо задане рівняння до вигляду :
Виділимо корінь (знайдемо інтервал, в якому знаходиться корінь) заданого рівняння шляхом : табулювання f(t);
Програма табулювання функції мовою С
//Lab_1V
#include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float t)
{float a=50,b=500,T=150,k=0.85;
return a+(b-a)/60*(t-(1-exp(-k*t))/k)-T;}
main()
{clrscr();
float t;
for(t=0;t<=60;t+=4)
printf("\n\nt=%.4f y=%.4f",t,f(t));
getch();
return 0;
}
Результати табулювання функції мовою С
t
y
0.0000
-100.0000
4.0000
-78.5210
8.0000
-48.8137
12.0000
-18.8232
16.0000
11.1765
20.0000
41.1765
24.0000
71.1765
28.0000
101.1765
32.0000
131.1765
36.0000
161.1765
40.0000
191.1765
44.0000
221.1765
48.0000
251.1765
52.0000
281.1765
56.0000
311.1765
60.0000
341.1765
Табулювання функції в середовищі MATLAB
Файл f_bvg1 в якому описана функція f(t)
function y=f_bvg1(t);
a=50;b=500;k=0.85;T=150;
y=a+(b-a)/60*(t-(1-exp(-k*t))/k)-T;
Програма табулювання функції f(t) в середовищі MATLAB
%bvglab
clc;clear;
a=0;b=60;
t=[a:(b-a)/1e2:b];
y=f_bvg1(t);
t_zero=fzero('f_bvg1',(a+b)/2);
plot(t,y,'k-',t_zero,0,'r*');grid;
xlabel('t,XB');
ylabel('T(t),C');
Графік табулювання функції f(t) в середовищі MATLAB
Висновок : в результаті табулювання функції і побудови графіка видно, що корінь нелінійного рівняння знаходиться на інтервалі [12;16 ].
1) Метод половинного ділення
Блок-схема алгоритму
Програма мовою С
#include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float t)
{float a=50,b=500,T=150,k=0.85;
return (a+(b-a)/60*(t-(1-exp(-k*t))/k)-T);
}
main ()
float t0,a=12,b=16,eps=1e-4,k=0;
a:
t0=(a+b)/2;
if(f(a)*f(t0)>0) a=t0;
else b=t0;
if(fabs(a-b)>eps) goto a;
printf ("t0=%f eps=%f k=%f",t0,eps,k);
getch();
return 0;
}
Результат виконання програми
t0
k
ε
14.5098
16
14.50980
19
14.509799
22
Наближення кореня в середовищі MATLAB
%Metod polovunnoho dilennya
a=12;b=16;k=0;eps=1e-4;
t0=(a+b)/2;
while abs(a-b)>eps
if f_bvg1(a)*f_bvg1(t0)>0 a=x0;
else b=x0;
end;
t0=(a+b)/2;
k=k+1;
end;
format long;
disp('a to b k')
disp([a t0 b k])
Результат виконання програми
t0
k
ε
14.5098
16
14.50980
19
14.509799
22
2) Mетод простих ітерацій
У цьому методі рівняння f(t) замінюється еквівалентним йому рівнянням t=φ(t).
Q = 7.4999 → k = 4
q = 0.87499
Блок-схема алгоритму
Програма мовою С
#include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float t)
{float a=50,b=500,T=150,k=0.85;
return (a+(b-a)/60*(t-(1-exp(-k*t))/k)-T);
}
main()
{float t0=14,t,eps=1e-4,q=0.8749; int i=0;
clrscr();
a:
t=t0-f(t0)/4;
if(fabs(t-t0)>eps*(1-q)/q)
{t0=t; i++; goto a;
}
printf(" t=%.4f i=%d",t,i);
getch()...